package com.dishdex.menuhub.console;

import org.springframework.boot.ApplicationArguments;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.method.support.HandlerMethodArgumentResolver;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;

import java.util.List;

/**
 * ClassName:
 * Package: com.dishdex.menuhub.console
 * Description:
 *
 * @Author:
 * @Create 2025/10/22 10:13
 * @Version 1.0
 */
@Configuration
//WebMvcConfigurer 让你“只动配置，不动核心”就能按需扩展 Spring-MVC 的功能。
public class WebMvcConfiguration implements WebMvcConfigurer {

    private final ApplicationArguments appArguments;

    public WebMvcConfiguration(ApplicationArguments appArguments) {
        this.appArguments = appArguments;
    }


    /*
    * Spring-MVC 每次准备调用控制器方法前，会遍历这个 resolvers 列表；
      只要某个 resolver.supportsParameter(...) 返回 true，就会调用它的 resolveArgument(...) 把返回值直接塞进方法形参；
      于是所有带 @VerifiedUser User loginUser 参数的方法，都会被咱们的 UserAuthorityResolver 接管，无需再写重复拦截器。
    * */
    @Override
    public void addArgumentResolvers(List<HandlerMethodArgumentResolver> resolvers) {
        resolvers.add(newUserAuthResolver());
    }

    @Bean
    public UserAuthorityResolver newUserAuthResolver() {
        return new UserAuthorityResolver(appArguments);
    }
}
